<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>IfWinExist / IfWinNotExist</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>IfWinExist / IfWinNotExist</h1>

<p>检查指定的窗口是否存在.</p>

<pre class="Syntax">IfWinExist [, WinTitle, WinText,  ExcludeTitle, ExcludeText]
IfWinNotExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]
<a href="WinGet.htm">UniqueID</a> := WinExist("WinTitle", "WinText", "ExcludeTitle", "ExcludeText")</pre>
<h3>参数</h3>
<table class="info">
  <tr> 
    <td width="15%">WinTitle</td>
    <td width="85%">目标窗口的标题或部分标题 (匹配行为由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定). 如果省略此参数和其他 3 个参数, 那么将使用 <a href="../LastFoundWindow.htm">上次找到的窗口</a> (即检查指定的窗口看它是否仍然存在). 如果此参数为字母 A 且省略其他 3 个参数, 那么将使用活动窗口. 要使用窗口类, 请在此参数中指定 ahk_class ExactClassName (在 Window Spy 中所显示的). 要使用 <a href="Process.htm">进程标识符 (PID)</a>, 请指定 ahk_pid %VarContainingPID%. 要使用 <a href="GroupAdd.htm">窗口组</a>, 请指定 ahk_group GroupName. 要使用窗口的 <a href="WinGet.htm">唯一 ID 号</a>, 请指定 ahk_id %VarContainingID%. 通过指定 <a href="../LastFoundWindow.htm#multi">多个条件</a> 可以缩小搜索范围. 例如: <em>My File.txt ahk_class Notepad</em></td>
  </tr>
  <tr> 
    <td>WinText</td>
    <td>如果使用此参数, 那么它必须是目标窗口中单个文本元素的子字符串 (和内置的 Window Spy 工具显示的一样). 当 <a href="DetectHiddenText.htm">DetectHiddenText</a> 的设置为 ON 时, 那么会检测到隐藏文本元素.</td>
  </tr>
  <tr>
    <td>ExcludeTitle</td>
    <td>标题中含有此参数值的窗口将被排除. 注意: 由于向后兼容 <a href="../AutoIt2Users.htm">.aut 脚本</a>, 所以如果此参数准确匹配某个命令名, 那么它将被解释为命令. 要变通解决此问题, 请使用 <a href="../Functions.htm#WinExist">WinExist() 函数</a> 代替此命令.</td>
  </tr>
  <tr>
    <td>ExcludeText</td>
    <td>文本中含有此参数值的窗口将被排除.</td>
  </tr>
</table>

<h3>备注</h3>
<p>如果省略所有参数, 那么将检查 <a href="../LastFoundWindow.htm">上次找到的窗口</a> 看它是否仍然存在 (如果是 IfWinNotExist 则检查其是否不存在).</p>
<p>如果这些命令的其中一个确定了某个符合的窗口存在, 那么 <a href="../LastFoundWindow.htm">上次找到的窗口</a> 将更新为此窗口. 换句话说, 如果 <em>IfWinExist</em> 匹配结果为 true 或 <em>IfWinNotExist</em> 匹配结果为 false, 那么将更新上次找到的窗口.</p>
<p>WinExist() 返回首个匹配窗口的 <a href="WinGet.htm">唯一 ID (HWND)</a> (没有找到匹配时则为 0). 由于所有的非零数字都被视为 "true",  所以每当 <em>WinTitle</em> 存在时, <em>if WinExist("WinTitle")</em> 语句为 true.</p>
<p>要获取控件的 HWND (用于 <a href="PostMessage.htm">Post/SendMessage</a> 或 <a href="DllCall.htm">DllCall</a> 中), 请使用 <a href="ControlGet.htm#Hwnd">ControlGet Hwnd</a> 或 <a href="MouseGetPos.htm">MouseGetPos</a>.</p>
<p><a href="SetWinDelay.htm">SetWinDelay</a> 不适用于 IfWinExist/IfWinActive.</p>
<p>窗口标题和文本是区分大小写的. 只有在打开 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 设置时, 才会检测到隐藏窗口.</p>

<h3>相关</h3>
<p><a href="IfWinActive.htm">IfWinActive</a>, <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a>, <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a>, <a href="../LastFoundWindow.htm">上次找到的窗口</a>, <a href="Process.htm">Process</a>, <a href="WinActivate.htm">WinActivate</a>, <a href="WinWaitActive.htm">WinWaitActive</a>, <a href="WinWait.htm">WinWait</a>, <a href="WinWaitClose.htm">WinWaitClose</a>, <a href="_IfWinActive.htm">#IfWinActive/Exist</a></p>
<h3>示例</h3>
<pre class="NoIndent">IfWinExist, Untitled - Notepad
{
    WinActivate  <em>; 自动使用前面找到的窗口.</em>
    WinMaximize  <em>; 同上</em>
    Send, Some text.{Enter}
    return
}

IfWinNotExist, Calculator
    return
else
{
    WinActivate  <em>; 前面的 "IfWinNotExist" 也为我们设置了 "上次找到的" 窗口.</em>
    WinMove, 40, 40  <em>; 把它移动到新的位置.</em>
    return
}

if WinExist("ahk_class Notepad") or WinExist("ahk_class" . ClassName)
    WinActivate  <em>; 这里使用 <a href="../LastFoundWindow.htm">上次找到的窗口</a>.</em>

MsgBox % "The active window's ID is " . WinExist("A")</pre>

</body>
</html>
